package map;

import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;

public class HandOfStraights846 {
    public boolean isNStraightHand(int[] hand, int groupSize) {
        if (hand.length % groupSize != 0) {
            return false;
        }
        TreeMap<Integer, Integer> map = new TreeMap<>();
        for (int i = 0; i < hand.length; i++) {
            map.put(hand[i], map.getOrDefault(hand[i], 0) + 1);
        }

        while (map.size() > 0) {
            Map.Entry<Integer, Integer> entry = map.firstEntry();
            for (int i = 0; i < groupSize; i++) {
                Integer temp = map.get(entry.getKey() + i);
                if (temp == null) {
                    return false;
                }
                if (temp == 1) {
                    map.remove(entry.getKey() + i);
                } else {
                    map.put(entry.getKey() + i, temp - 1);
                }
            }
        }
        return true;
    }
}
